home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 9
/
FM Towns Free Software Collection 9.iso
/
t_os
/
tool
/
mopterm
/
line.plt
next >
Wrap
Text File
|
1994-11-16
|
14KB
|
558 lines
/* *
* Line Control Auto Pilot *
* *
* このオートパイロットについては,流用,変更,組み込み, *
* 許可なくOKです。 *
* ただし,以下の著作権表示については,必ず,コピーして下さい。 *
* *
* All Right Reserved, Copyright (c) モップ(NIFTY-PFF00570) 1992 *
* (Masahiro Kezuka) *
* *
* 1992年 3月 22日 初版 Ver0.01 *
* 1992年 4月 5日 二版 Ver0.02 *
* 1992年 7月 17日 三版 Ver0.03 *
* *
* 作成/利用ファイル 「LINE.DAT」 *
* *
* */
var AttrData[256]; /* MOPTERMの属性等 file「LINE.DAT」の頭5行*/
var LineData[8192]; /* 登録したセンターの情報 LINE.DATの6行目以降
各行が センター名/電話番号/モデムコマンド/属性データ */
var CurDir[64]; /* 起動時のディレクトリー */
var OneSize[4]; /* each Center data size */
var NumHost[4]; /* 登録されているセンターの数 */
%OneSizeM 16+2+80+2+80+2; /* minimum OneHost Data Size */
/***********************************************************************
*
* 共通の処理ルーチン
*
***********************************************************************/
/* パラメタで指定されたファイルを削除する */
/*%delfile{ [ filename ] 組み込み文でMopTerm本体が実現したため */
/* dispoff({Yes}); コメント化 */
/* command({del }|filename); */
/* dispoff({No}) */
/*}; */
/* パラメタで指定されたディレクトリへ移動する(「A:\」と「A:」の両方が可能) */
%setcdir2 {[dir]
%dir2 @case(@nochar(dir),
2,{im(dir|{\})},,{im(dir)});
setcdir(dir2)
};
%zerop{[num,deg]
var ans[deg];
var i[3];
i:=@nochar(num);
case(i!=deg,{Yes},
{
loop({
ans:=ans|{0};
i:=i+1;
im(i<deg)
});
im(ans | num);
},,{
im(num)
})
};
%blankp{[num,deg]
var ans[deg];
var i[3];
i:=@nochar(num);
case(i!=deg,{Yes},
{
loop({
ans:=ans|{ };
i:=i+1;
im(i<deg)
});
im( num | ans);
},,{
im(num)
})
};
%makefile{
AttrData:={**MOPTERM HOST DATA Ver0.01**\n}|
{13111111208%$\n}|
{\n\n\n};
LineData:={};
write(LineFile,AttrData);
write(LineFile,LineData);
case(@filechk( LineFile ),{No},{
plane(
{c管理用のファイル「LINE.DAT」が,カレントディレクトリーに作成できません。
c 「MOPTERM.EXP」を CD又は,
c プロテクトの掛かったフロッピーに置いて起動していませんか?。
c CDの場合, フロッピー等にコピーしてお使い下さい。
c
s /確認});
stop
});
OneSize:=OneSizeM;
};
%RepFile{
delfile(LineFile);
write(LineFile,AttrData);
write(LineFile,LineData);
};
%SetCName{
var pos[5];
var StartP[5];
var MenuText[1024];
var Line[80];
pos:=0;
StartP:=1;
NumHost:=0;
crchg({No});
loop({
%Name @getchar(LineData,StartP,16);
case(Name<>{} && NumHost<=45,
{Yes},{ Line:=
@case(pos,
0,{pos:=1;im({\ns })},
1,{pos:=2;im({})},
2,{pos:=0;im({})} )
| {/} | Name;
MenuText:=MenuText | Line;
NumHost:=NumHost+1;
StartP:=StartP+OneSize;
im({Yes})
},,{im({No})})
});
crchg({Yes});
/*display(NumHost|{=host\n});*/
im(MenuText)
};
%DelCenter{
var line[5];
%DelCA{[num]
%Name @head(@getline(LineData,(num-1)*3+1,1),{\n});
select({ 「}|Name|{」の定義を削除しますか?},99999,{},
{ 削除する },{
LineData:=@getline(LineData,1,(num-1)*3) |
@getline(LineData,num*3+1,9999);
RepFile;
},{ 削除しない },{})
};
%MenuText {c <<削除するセンタを選択して下さい>>\n}|
{s /< 処理中止 >};
%MenuRes @plane(MenuText|@SetCName);
case(@head(@getline(MenuRes,1,1),{\n})+0,
0,{
line:=2;
loop({
%no @head(@getline(MenuRes,line,1),{\n});
case(no!=0,{Yes},{DelCA((line-2)*3+no)});
line:=line+1;
im((no == 0) && (no <> {}))
})
});
};
/* 登録変更用の,共通ルーチン,共通変数 */
%SetT {[line,leng]
blankp(@head(@getline(res,line,1),{\n}),leng)
};
%SetD {[line]
im(@head(@getline(res,line,1),{\n})+0)
};
%SetDn {[line,leng]
zerop(@head(@getline(res,line,1),{\n})+0,leng)
};
%CenMenuD{[title]
%CenterA2
{r通信速度 : / 300 /1200 /2400 /4800 /9600
rStopBit : / 1 bit / 2 Bit
rParity : / None / Odd / Even
rDataleng : / 8 bit / 7 bit
r先行送信行数: / 4 / 3 / 2 / 1
r送信入力方式: /行単位 /文字単位1/文字単位2
r受信改行方式: /復改同時 / 復改別
tリトライ回数(0:無限) /123
};
%Attr @getline(AttrData,2,1);
%BaudR @case(@getchar(OldL3,7,1)+0,0,
{getchar(Attr,2,1)},,
{getchar(OldL3,7,1)});
%OldL3 @getline(NewLine,3,1);
%res @plane({c <<センター付加属性}|Title|{画面>>\n} |
CenterA2 |
{s /}|Title|{しない/ }
|Title|{する},
BaudR,
@getchar(OldL3,8,1), @getchar(OldL3,9,1),
@getchar(OldL3,10,1), @getchar(OldL3,11,1),
@getchar(OldL3,12,1), @getchar(OldL3,13,1),
@getchar(OldL3,14,3)+0 );
case(@SetD(9),
2,{
NewLine:= @getline(NewLine,1,2) | @getchar(OldL3,1,6)
| @SetD(1) | @SetD(2) | @SetD(3)
| @SetD(4) | @SetD(5) | @SetD(6)
| @SetD(7) | @SetDn(8,3);
});
};
%CenMenu{[OLine,Title]
%CenterAt
{tセンター名(任意) /1234567890123456
t電話番号 /123456789012345678901234567890
tモデムコマンド /123456789012345678901234567890
rコード系: /SJIS /JIS /旧JIS/EUC
r行の終わりのコード(送信時): /CR /LF /CR+LF
rフロー 制御: /RS-CS線(ハード) /X-制御(ソフト) /無し
rESC コード: /ESC無し /ESCあり
rCTRLコード: /CTRL無し /CTRLあり
rFlying X: /使用しない/使用する
t接続後のオートパイロット(あれば) /12345678901234567890
};
var NewLine[256];
NewLine:=OLine;
loop({
%OldL NewLine;
%OldL2 @getline(OldL,2,1);
%OldL3 @getline(OldL,3,1);
%res @plane({c <<センター} | Title | {画面>>\n} |
CenterAt |
{s /}|Title|{しない/ }
|Title|{する / 付加属性},
@head(@head(OldL,{\n}),{ }),
@head(@getchar(OldL2,1,30),{ }), @head(@getchar(OldL2,31,30),{ }),
@getchar(OldL3,1,1), @getchar(OldL3,2,1),
@getchar(OldL3,3,1), @getchar(OldL3,4,1),
@getchar(OldL3,5,1), @getchar(OldL3,6,1),
@head(@getchar(OldL2,61,20),{ }) );
case(@SetD(11)>=2,
{Yes},{
NewLine:=@SetT(1,16) | {\n}
| @SetT(2,30) | @SetT(3,30) | @SetT(10,20) | {\n}
| @SetD(4) | @SetD(5) | @SetD(6)
| @SetD(7) | @SetD(8) | @SetD(9)
| @getchar(OldL3,7) ;
case(@SetD(11),
2,{
NewLine:=@blankp(NewLine,OneSize-2) | {\n};
im({No})
},3,{ CenMenuD(Title);
im({Yes})
})
},,{
NewLine:={};
im({No})
})
}); /* end of loop */
im(NewLine)
};
%MopMenu{[OLine,Title]
%CenterAt
{r回線種別 : /ダイヤル回線 /プッシュ回線
r通信速度 : / 300 /1200 /2400 /4800 /9600
rポート種別: /自動切替/内蔵 /外部ポート
r文書送信時送信データ表示: /無し /有り
rクリック音: /無し /有り
r納豆スクロール : /無し /有り
rローマ時入力 : /無し /有り
rVisiBell : /無し /有り
r改行マーク : /無し /有り
tタブ桁数 /xx
tDOSコマンド文字 /x
tオートパイロット文字 /x
};
var NewLine[256];
NewLine:=OLine;
%OldL NewLine;
%res @plane({c <<MopTerm属性} | Title | {画面>>\n} |
CenterAt |
{s /変更しない/ 変更する },
@getchar(OldL,1,1), @getchar(OldL,2,1),
@getchar(OldL,3,1), @getchar(OldL,4,1),
@getchar(OldL,5,1), @getchar(OldL,6,1),
@getchar(OldL,7,1), @getchar(OldL,8,1),
@getchar(OldL,9,1), @getchar(OldL,10,2)+0,
@getchar(OldL,12,1), @getchar(OldL,13,1),
);
case(@SetD(13)>=2,
{Yes},{
NewLine:= @SetD(1) | @SetD(2) | @SetD(3) | @SetD(4)
| @SetD(5) | @SetD(6) | @SetD(7) | @SetD(8)
| @SetD(9) | @SetDn(10,2) | @SetT(11,1) | @SetT(12,1)
| {\n};
},,{
NewLine:={};
});
im(NewLine)
};
%AddCenter{
%NewL @CenMenu({},{登録});
case(NewL<>{},{Yes},{
LineData:=LineData | NewL;
write(LineFile,NewL);
});
};
%RepC2{[num]
%OldL @getchar(@getline(LineData,(num-1)*3+1,3),1,OneSize-2);
%NewL @CenMenu(OldL,{変更});
case(NewL<>{},{Yes},{
LineData:=@getline(LineData,1,(num-1)*3) |
NewL |
@getline(LineData,num*3+1,9999);
RepFile;
})
};
%RepMop{
%OldL @head(@getline(AttrData,2,1),{\n});
%NewL @MopMenu(OldL,{変更});
case(NewL<>{},{Yes},{
AttrData:=@getline(AttrData,1,1) |
NewL |
@getline(AttrData,3,9999);
RepFile;
})
};
%RepCenter{
var line[5];
%MenuText {c <<変更するセンタを選択して下さい>>\n}|
{s /< 処理中止 >};
%MenuRes @plane(MenuText|@SetCName);
case(@head(@getline(MenuRes,1,1),{\n})+0,
0,{
line:=2;
loop({
%no @head(@getline(MenuRes,line,1),{\n});
case(no!=0,{Yes},{RepC2((line-2)*3+no)});
line:=line+1;
im((no == 0) && (no <> {}))
})
});
};
%SetMop{
%Attr @getline(AttrData,2,1);
%SetYN {[num,func]
%p @case(@getchar(Attr,num,1),
1,{ im(func | {({No})} ) },
2,{ im(func | {({Yes})}) },
,{ im({}) } );
p
};
case(@getchar(Attr,3,1),
1,{ port0({auto})
},2,{ port0({in})
},3,{ port0({out})
});
SetYN(4,{dispecho});
SetYN(5,{click});
SetYN(6,{nattou});
case(@getchar(Attr,7,1),
1,{ setoak({J})
},2,{ setoak({JR})
});
SetYN(8,{visibell});
SetYN(9,{retmark});
case(@getchar(Attr,10,2)!=0,
{Yes},{ tab(@getchar(Attr,10,2))
});
case((@getchar(Attr,12,1)<>{}) && (@getchar(Attr,12,1)<>{ }),
{Yes},{ doschar(@getchar(Attr,12,1))
});
case((@getchar(Attr,13,1)<>{}) && (@getchar(Attr,13,1)<>{ }),
{Yes},{ pilotch(@getchar(Attr,13,1))
});
};
%AccCenter{[num]
%OldL @getline(LineData,(num-1)*3+1,3);
%OldL2 @getline(OldL,2,1);
%OldL3 @getline(OldL,3,1);
%Attr @getline(AttrData,2,1);
var DialAT[100];
var count[4];
%message {「}|@head(OldL,{\n}) |{」 へアクセスします。 (}|@daylong | {)};
display({\n}| message | {\n});
footnote(message);
case(@getchar(OldL3,1,1),
1,{ code({sjis})
},2,{ code({jis})
},3,{ code({ojis})
},4,{ code({euc})
});
case(@getchar(OldL3,2,1),
1,{ lineend({CR}); lineendt({CR})
},2,{ lineend({LF}); lineendt({LF})
},3,{ lineend({CRLF}); lineendt({CRLF})
});
case(@getchar(OldL3,3,1),
1,{ rscs({Yes}); xon({No})
},2,{ rscs({No}); xon({Yes})
},3,{ rscs({No}); xon({No})
});
case(@getchar(OldL3,4,1),
1,{ esc({No})
},2,{ esc({Yes})
});
case(@getchar(OldL3,5,1),
1,{ ctrl({No})
},2,{ ctrl({Yes})
});
case(@getchar(OldL3,6,1),
1,{ flyingx({No})
},2,{ flyingx({Yes})
});
%BaudR @case(@getchar(OldL3,7,1)+0,0,
{getchar(Attr,2,1)},,
{getchar(OldL3,7,1)});
case(BaudR+0,
1,{ baud(300)
},2,{ baud(1200)
},3,{ baud(2400)
},4,{ baud(4800)
},5,{ baud(9600)
});
case(@getchar(OldL3,8,1),
1,{ stopbit(1)
},2,{ stopbit(2)
});
case(@getchar(OldL3,9,1),
1,{ parity({None})
},2,{ parity({Odd})
},3,{ parity({Even})
});
case(@getchar(OldL3,10,1),
1,{ dataleng(8)
},2,{ dataleng(7)
});
case(@getchar(OldL3,11,1)<>{ },
{Yes},{ flyline(@getchar(OldL3,11,1))
});
case(@getchar(OldL3,12,1),
1,{ sendtype({Line})
},2,{ sendtype({Ch/2})
},3,{ sendtype({Ch/1})
});
case(@getchar(OldL3,13,1),
1,{ crmode({No})
},2,{ crmode({Yes})
});
DialAT:=@head(@getchar(OldL2,31,30),{ });
case(@getchar(DialAT,1,2),{AT},,{at},,
,{DialAT:={AT}|DialAT});
case(@getchar(Attr,1,1),
1,{ DialAT:=DialAT | {DP}
},2,{ DialAT:=DialAT | {DT}
});
DialAT := DialAT | @head(@getchar(OldL2,1,30),{ });
count:=@getchar(OldL3,14,3);
case(count == 0 ,{Yes},{count:=9999});
loop({ count:=count-1;
dialone(DialAT,{
%Auto @head(@getchar(OldL2,61,20),{ }) ;
case(Auto<>{},
{Yes},{
case(@filechk( Auto ),{Yes},{
%p {#}|Auto ;
p
},,{
display({\nAutoPilot File「}|Auto|
{」はありません\n})
})
});
im({No})
},{im(count>0)} )
});
stop
};
%FirstMenu{
var line[5];
var no[5];
%CSel @SetCName;
%MenuText {c <<接続するセンタ-,又は,処理を選択して下さい>>\n} |
@case(NumHost,
0,{im({s /<共通属性>/<センター登録>/----------/----------/<処理中止>})},
45,{im({s /<共通属性>/----------/<センター削除>/<センター変更>/<処理中止>})},
,{im({s /<共通属性>/<センター登録>/<センター削除>/<センター変更>/<処理中止>})}
);
%MenuRes @plane(MenuText | CSel);
case(@head(@getline(MenuRes,1,1),{\n})+0,
1,{ RepMop; SetMop },
2,{case(NumHost<45,{Yes},AddCenter)},
3,{case(NumHost!=0,{Yes},DelCenter)},
4,{case(NumHost!=0,{Yes},RepCenter)},
5,{stop},
0,{
line:=2;
loop({
no:= @head(@getline(MenuRes,line,1),{\n});
case(no!=0,{Yes},{AccCenter((line-2)*3+no)});
line:=line+1;
im((no == 0 ) && (no <> {}))
});
case(no=={},{Yes},{stop})
});
};
/* Main of LINE.PLT */
%CurDir @case(@nochar(@getcdir),
3,{getchar(@getcdir,1,2)},
,{getcdir});
footnote({});
stopbit(1);
dataleng({8bit});
parity({None});
setoak({J});
click({No});
nattou({Yes});
%LineFile @case(@nochar(@initdir),
3,{head(@initdir,{\})},,{initdir}) | {\LINE.DAT};
case(@filechk( LineFile ),
{Yes},{
AttrData:=@read(LineFile,1,5);
LineData:=@read(LineFile,6,999);
OneSize:=@nochar(@getline(LineFile,1,3));
case(OneSize<OneSizeM,{Yes},{OneSize:=OneSizeM});
},{No},{makefile});
SetMop;
loop({ FirstMenu; im({Yes}) })